#include "pseudoangulo.h"

double pseudoangulo(const Vector& v)
{
    if (v.get_dimensao() != 2) return(-1);
    double resultado = 0;
    // Checar se o vetor "v" está mais perto da reta X:
    if (fabs(v(0)) > fabs(v(1)))// Se |v.x| > |v.y|...
    {
        resultado = v(1)/v(0);// (v.y/v.x)
        if (v(0) > 0)// Se (v.x > 0)...
        {
            if (resultado < 0) resultado += 8;
        }
        else resultado += 4;
    }
    else// Caso o vetor "v" esteja mais perto da reta Y:
    {
        resultado = v(0)/v(1);// (v.x/v.y)
        // Se (v.y > 0)...
        if (v(1) > 0) resultado = 2 - resultado;
        else resultado = 6 - resultado;
    }
    return(resultado);
}

double pseudoangulo(const Vector& a, const Vector& b)
{
    double resultado = pseudoangulo(b) - pseudoangulo(a);
    if (resultado < 0) resultado += 8;
    return(resultado);
}

int posicao(const Vector& a, const Vector& b)
{
    // *** Retorno da função ***************
    //  1 : "a" está a direita de "b";
    // -1 : "a" está a esquerda de "b";
    //  0 : "a" está a alinhado com "b";
    // *************************************
    double resultado = pseudoangulo(a,b);
    //cout<<"(debug: "<<resultado<<")";
    if ((resultado > 0) && (resultado < 4)) return(1);
    if ((resultado > 4) && (resultado < 8)) return(-1);
    // Se chegar até aqui, o valor de resultado é ou "0", ou "4",
    // indicando o alinhamento entre os dois vetores.
    return(0);
}
